home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ASM-E.ZIP / E22.ASM < prev    next >
Assembly Source File  |  1991-08-19  |  6KB  |  290 lines

  1. code    segment
  2.         assume  cs:code, ds:code, es:code
  3.         org     100h
  4. prog:
  5.         jmp     main
  6.  
  7. asc     db      256 dup (0)
  8. lll     dw      ?
  9. tbl     dw      256 dup (0)
  10. cod     db      256 dup (0)
  11. len     db      256 dup (0)
  12. dat     db      0,10,16,9,64,8,64,8,0,7
  13. fn1     db      'te.com',0
  14. fn2     db      'sup.com',0
  15. fn3     db      'e1.com',0
  16. fn4     db      'dat.dat',0
  17. main:
  18.  
  19.         call    read
  20.         call    build
  21.         call    uha
  22.         call    good
  23.         call    write
  24.  
  25.         mov     al,00h
  26.         mov     ah,4ch
  27.         int     21h
  28.  
  29. good    proc    near
  30.         mov     ax,cs
  31.         mov     ds,ax
  32.         mov     si,offset asc
  33.         mov     di,179
  34.         mov     cx,130
  35.         rep     movsb
  36.  
  37.         mov     dx,offset fn3
  38.         mov     al,00h
  39.         mov     ah,3dh
  40.         int     21h
  41.         jc      ssr
  42.         mov     bx,ax
  43.         mov     ax,es
  44.         mov     ds,ax
  45.         sub     dx,dx
  46.         mov     cx,179
  47.         mov     ah,3fh
  48.         int     21h
  49.         jc      ssr
  50.         mov     ah,3eh
  51.         int     21h
  52.         mov     ax,cs
  53.         mov     ds,ax
  54. ssr:    ret
  55. good    endp
  56.  
  57. uha     proc    near
  58.         mov     ax,cs
  59.         add     ax,1000h
  60.         mov     ds,ax
  61.         add     ax,1000h
  62.         mov     es,ax
  63.         mov     bx,4fffh
  64.         mov     di,bx
  65.         mov     ch,0
  66.         sub     bp,bp
  67. lu10:   sub     ax,ax
  68.         mov     al,[bx]
  69.         mov     si,ax
  70.         mov     al,cs:cod[si]
  71.         mov     dl,cs:len[si]
  72.         mov     cl,dl
  73.         cmp     dl,7
  74.         jne     lu20
  75.         inc     ah
  76. lu20:   sub     cl,ch
  77.         shl     ax,cl
  78.         or      bp,ax
  79.         add     ch,16
  80.         sub     ch,dl
  81.         mov     cl,8
  82. lu30:   cmp     ch,cl
  83.         jc      lu40
  84.         mov     ax,bp
  85.         shl     bp,cl
  86.         mov     es:[di],ah
  87.         dec     di
  88.         sub     ch,cl
  89.         jmp     short lu30
  90. lu40:   dec     bx
  91.         cmp     bx,0ffffh
  92.         jne     lu10
  93.         mov     ax,bp
  94.         mov     es:[di],ah
  95.         mov     lll,di
  96.         mov     ah,0
  97. lu50:   dec     di
  98.         mov     es:[di],ah
  99.         cmp     di,0
  100.         jne     lu50
  101.         ret
  102. uha     endp
  103.  
  104. fill    proc    near
  105.         sub     si,si
  106.         mov     cx,0100h
  107. lf10:   mov     ax,si
  108.         mov     cs:asc[si],al
  109.         inc     si
  110.         loop    lf10
  111.         sub     bx,bx
  112.         mov     cx,5000h
  113. lf20:   mov     al,[bx]
  114.         mov     si,ax
  115.         shl     si,1
  116.         inc     cs:tbl[si]
  117.         inc     bx
  118.         loop    lf20
  119.         ret
  120. fill    endp
  121.  
  122. swap    proc    near
  123.         push    ax
  124.         mov     ax,tbl[si]
  125.         xchg    ax,tbl[di]
  126.         mov     tbl[si],ax
  127.         shr     si,1
  128.         shr     di,1
  129.         mov     al,asc[si]
  130.         xchg    al,asc[di]
  131.         mov     asc[si],al
  132.         shl     si,1
  133.         shl     di,1
  134.         pop     ax
  135.         ret
  136. swap    endp
  137.  
  138. sort    proc    near
  139.  
  140.         mov     bp,32
  141.         mov     cl,1
  142. ss00:   sub     ax,ax
  143.         mov     dx,510
  144. ss05:   mov     di,ax
  145.         mov     bx,tbl[di]
  146.         mov     si,di
  147. ss10:   cmp     si,dx
  148.         je      ss20
  149.         inc     si
  150.         inc     si
  151.         cmp     bx,tbl[si]
  152.         jnc     ss10
  153.         inc     di
  154.         inc     di
  155.         call    swap
  156.         jmp     short ss10
  157. ss20:   mov     si,ax
  158.         call    swap
  159.         cmp     di,bp
  160.         je      ss40
  161.         jc      ss30
  162.         mov     dx,di
  163.         dec     dx
  164.         dec     dx
  165.         jmp     short ss05
  166. ss30:   mov     ax,di
  167.         inc     ax
  168.         inc     ax
  169.         jmp     short ss05
  170. ss40:   shl     bp,cl
  171.         shl     cl,1
  172.         cmp     cl,8
  173.         jne     ss00
  174.  
  175. ;        call    writ
  176.  
  177.         mov     di,offset asc + 128
  178.         sub     bx,bx
  179. k10:    mov     [bx][di],bl
  180.         inc     bl
  181.         jnz     k10
  182.         mov     si,offset asc
  183. k20:    mov     bl,[si]
  184.         mov     byte ptr [bx][di],0
  185.         inc     si
  186.         cmp     si,di
  187.         jne     k20
  188.         dec     di
  189.         mov     cx,128
  190. k30:    inc     di
  191.         cmp     byte ptr [di],0
  192.         je      k30
  193.         mov     al,[di]
  194.         mov     [si],al
  195.         inc     si
  196.         loop    k30
  197.         ret
  198. sort    endp
  199.  
  200. make    proc    near
  201.         mov     cx,16
  202.         mov     bx,offset dat
  203.         sub     si,si
  204.         sub     ax,ax
  205. lm10:   mov     al,asc[si]
  206.         mov     di,ax
  207.         mov     dx,si
  208.         add     dl,[bx]
  209.         mov     cod[di],dl
  210.         mov     dl,[bx+1]
  211.         mov     len[di],dl
  212.         inc     si
  213.         cmp     si,cx
  214.         jnz     lm10
  215.         inc     bx
  216.         inc     bx
  217.         shl     cx,1
  218.         cmp     cx,512
  219.         jnz     lm10
  220.         ret
  221. make    endp
  222.  
  223. build   proc    near
  224.         call    fill
  225.         mov     ax,cs
  226.         mov     ds,ax
  227.         call    sort
  228.         call    make
  229.         ret
  230. build   endp
  231.  
  232. write   proc    near
  233.         mov     dx,offset fn2
  234.         mov     al,02h
  235.         mov     ah,3dh
  236.         int     21h
  237.         jc      sw
  238.         mov     bx,ax
  239.         mov     ax,es
  240.         mov     ds,ax
  241.         sub     dx,dx
  242.         mov     cx,5000h
  243.         mov     ah,40h
  244.         int     21h
  245.         jc      sw
  246.         mov     ah,3eh
  247.         int     21h
  248. sw:     ret
  249. write   endp
  250.  
  251. read    proc    near
  252.         mov     dx,offset fn1
  253.         mov     al,00h
  254.         mov     ah,3dh
  255.         int     21h
  256.         jc      sr
  257.         mov     bx,ax
  258.         mov     ax,ds
  259.         add     ax,1000h
  260.         mov     ds,ax
  261.         sub     dx,dx
  262.         mov     cx,5000h
  263.         mov     ah,3fh
  264.         int     21h
  265.         jc      sr
  266.         mov     ah,3eh
  267.         int     21h
  268. sr:     ret
  269. read    endp
  270.  
  271. writ    proc    near
  272.         mov     dx,offset fn4
  273.         sub     cx,cx
  274.         mov     ah,3ch
  275.         int     21h
  276.         mov     bx,ax
  277.         mov     dx,offset tbl
  278.         mov     cx,512
  279.         mov     ah,40h
  280.         int     21h
  281.         mov     ah,3eh
  282.         int     21h
  283.         ret
  284. writ    endp
  285.  
  286. last    label   byte
  287. code    ends
  288.         end     prog
  289.  
  290.